package com.alameda.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 日期工具类，提供日期格式化的静态方法
 *
 * @author Lv
 * @date 2025/01/20
 */
public class DateUtils {

    /**
     * 默认的日期格式 yyyy-MM-dd
     */
    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";

    /**
     * 日期格式：yyyyMMdd。
     */
    public static final String DATE_FORMAT_YYYY_MM_DD = "yyyyMMdd";

    /**
     * 日期格式：yyyy-MM。
     */
    public static final String DATE_FORMAT_YYYY_MM = "yyyy-MM";

    /**
     * 日期格式：yyyyMMddHHmmss，通常用于生成时间戳。
     */
    public static final String DATE_FORMAT_YYYY_MM_DD_HH_MM_SS_TIMESTAMP = "yyyyMMddHHmmss";

    /**
     * 日期格式：yyyy-MM-dd HH:mm:ss，完整的日期和时间。
     */
    public static final String DATE_FORMAT_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";

    /**
     * 日期格式：yyyy年MM月dd日，中文格式。
     */
    public static final String DATE_FORMAT_YYYY_MM_DD_CN = "yyyy年MM月dd日";

    /**
     * 将LocalDateTime格式化为默认的日期格式字符串 yyyy-MM-dd
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @return 格式化后的日期字符串
     */
    public static String formatLocalDateTimeToDefault(LocalDateTime localDateTime) {
        return formatLocalDateTime(localDateTime, DEFAULT_DATE_FORMAT);
    }

    /**
     * 将LocalDateTime对象格式化为yyyy-MM-dd HH:mm:ss格式的字符串
     * 此方法用于将日期和时间以易读的格式表示，便于日志记录、界面显示或文件写入等操作
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @return 格式化后的日期时间字符串
     */
    public static String formatLocalDateTimeToYmdHms(LocalDateTime localDateTime) {
        return formatLocalDateTime(localDateTime, DATE_FORMAT_YYYY_MM_DD_HH_MM_SS);
    }

    /**
     * 将LocalDateTime格式化为yyyyMMdd格式的字符串。
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @return 格式化后的日期字符串
     */
    public static String formatLocalDateTimeToDate(LocalDateTime localDateTime) {
        return formatLocalDateTime(localDateTime, DATE_FORMAT_YYYY_MM_DD);
    }

    /**
     * 将LocalDateTime格式化为yyyy-MM格式的字符串。
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @return 格式化后的日期字符串
     */
    public static String formatLocalDateTimeToMonth(LocalDateTime localDateTime) {
        return formatLocalDateTime(localDateTime, DATE_FORMAT_YYYY_MM);
    }

    /**
     * 将LocalDateTime格式化为中文格式的字符串：yyyy年MM月dd日。
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @return 格式化后的日期字符串
     */
    public static String formatLocalDateTimeToDayCn(LocalDateTime localDateTime) {
        return formatLocalDateTime(localDateTime, DATE_FORMAT_YYYY_MM_DD_CN);
    }

    /**
     * 将LocalDateTime格式化为yyyyMMddHHmmss格式的字符串，通常用于生成时间戳。
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @return 格式化后的日期字符串
     */
    public static String formatLocalDateTimeToTimestamp(LocalDateTime localDateTime) {
        return formatLocalDateTime(localDateTime, DATE_FORMAT_YYYY_MM_DD_HH_MM_SS_TIMESTAMP);
    }

    /**
     * 根据指定的格式将LocalDateTime格式化为日期字符串。
     *
     * @param localDateTime 待格式化的LocalDateTime对象
     * @param format        日期格式字符串
     * @return 格式化后的日期字符串
     */
    public static String formatLocalDateTime(LocalDateTime localDateTime, String format) {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
        return localDateTime.format(formatter);
    }

}
